package com.woniuxy.portal.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.woniuxy.portal.model.entity.Book;
import com.woniuxy.portal.service.BookService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@CrossOrigin(origins = "*") // 允许所有域名的跨域请求访问
@Api(tags = "图书信息接口")   // Swagger注解，用于API文档分类标记
@RestController             // 标识该类为RESTful控制器，返回值直接作为HTTP响应体
@RequestMapping("/book") // 设置该控制器的根路径为"/book"
public class BookController {

    private final BookService bookService;

    @Autowired
    public BookController(BookService bookService) {
        this.bookService = bookService;
    }

    /**
     * 根据购买量查询书籍列表，支持分页功能
     *
     * @param params 包含分页参数的Map，必须包含pageNum(页码)和pageSize(每页大小)两个键值对
     * @return ResponseEntity<IPage < Book>> 包含分页书籍信息的响应实体
     */
    @ApiOperation("首页：根据购买量查询书籍")
    @PostMapping("/findTopSale")
    public ResponseEntity<IPage<Book>> findTopSale(@RequestBody Map<String, Integer> params) {
        // 从参数中获取分页信息
        Integer pageNum = params.get("pageNum");
        Integer pageSize = params.get("pageSize");
        // 调用服务层方法查询销量前几的书籍
        IPage<Book> page = bookService.findTopSale(pageNum, pageSize);
        return ResponseEntity.ok(page);
    }

    /**
     * 根据书籍类型分页查询书籍信息
     *
     * @param params 包含分页参数和类型ID的请求参数，必须包含pageNum(页码)、pageSize(每页大小)、typeId(类型ID)
     * @return 返回分页查询结果，包含指定类型下的书籍列表及分页信息
     */
    @ApiOperation("首页：根据类别ID查询图书")
    @PostMapping("/findByType")
    public ResponseEntity<IPage<Book>> findByType(@RequestBody Map<String, Object> params) {
        // 从参数中获取分页信息
        Integer pageNum = (Integer) params.get("pageNum");
        Integer pageSize = (Integer) params.get("pageSize");
        Integer typeId = (Integer) params.get("typeId");
        // 调用服务层方法查询指定类型的书籍
        IPage<Book> page = bookService.findByType(pageNum, pageSize, typeId);
        return ResponseEntity.ok(page);
    }

    /**
     * 根据图书ID查询图书信息
     *
     * @param bookId 图书ID
     * @return ResponseEntity<Book> 包含图书信息的响应实体
     */
    @ApiOperation("首页：根据ID查询图书")
    @PostMapping("/findById/{id}")
    public ResponseEntity<Book> findById(@PathVariable("id") Integer bookId) {
        // 调用服务层方法查询指定ID的书籍信息
        Book book = bookService.findById(bookId);
        return ResponseEntity.ok(book);
    }

}
